import { defineStore } from 'pinia'
import { getMenus } from '@/api/menu'

// 特殊路由映射表（菜单标题 -> 组件路径）
const SPECIAL_ROUTES = {
  'APP管理': {
    path: '/app-management',
    component: 'APPManagement' // 对应src/views/APPManagement.vue
  },
  '用户APP查询': {
    path: '/user-app',
    component: 'UserApp',
    name: 'UserApp'
  },
  '大屏配置': {
    path: '/screen-config',
    component: 'LargeScreenConfiguration',
    name: 'LargeScreenConfiguration'
  },
  '数据源管理': {
    path: '/datasource',
    component: 'DataSourceManagement',
    name: 'DataSourceManagement'
  },
  '模板下载': {
    path: '/templates',
    component: 'TemplateDownload',
    name: 'TemplateDownload'
  },
  // 其他特殊路由...
  //用户列表路由
  '用户列表': {
    path: '/user/list',
    component: 'UserList',
    name: 'UserList'
  }
}

export const useMenuStore = defineStore('menu', {
  state: () => ({
    menus: [],
    isLoading: false,
    error: null
  }),

  actions: {
    async fetchMenus() {
      this.isLoading = true
      this.error = null
      
      try {
        const data = await getMenus()
        this.menus = this.normalizeMenuData(data)
        console.log('菜单数据标准化完成:', this.menus)
      } catch (error) {
        this.error = error.message || '菜单加载失败'
        console.error('菜单加载错误:', error)
      } finally {
        this.isLoading = false
      }
    },

    /**
     * 标准化菜单数据
     * @param {Array} data 原始菜单数据
     * @param {String|null} parentId 父级菜单ID
     * @returns {Array} 标准化后的菜单
     */
    normalizeMenuData(data, parentId = null) {
      if (!Array.isArray(data)) return []

      return data.map(item => {
        const isSpecialRoute = SPECIAL_ROUTES[item.Title]
        const hasChildren = item.Children?.length > 0

        // 生成路由路径（优先使用特殊路由配置）
        let path
        if (isSpecialRoute) {
          path = isSpecialRoute.path
        } else {
          path = item.RoutePath?.startsWith('/') 
            ? item.RoutePath 
            : parentId
              ? `/${parentId}/${item.Id}`  // 子菜单路径格式：/parentId/childId
              : `/${item.Id}`              // 顶级菜单路径格式：/id
        }

        // 标准化菜单项
        const normalizedItem = {
          id: item.Id,
          title: item.Title,
          icon: this.normalizeIcon(item.Icon, !!parentId),
          index: String(item.Index || item.Id), // Element-Plus菜单需要的index
          path: path,
          component: isSpecialRoute?.component || null, // 关联的组件名
          meta: {
            group: item.GroupName,
            requiresAuth: item.RequiresAuth !== false // 默认需要认证
          },
          rawData: item // 保留原始数据
        }

        // 递归处理子菜单
        if (hasChildren) {
          normalizedItem.children = this.normalizeMenuData(item.Children, item.Id)
          console.log(`生成子菜单 ${item.Id}:`, normalizedItem.children)
        }

        return normalizedItem
      })
    },

    /**
     * 标准化图标名称
     * @param {String|null} icon 原始图标名
     * @param {Boolean} isChild 是否是子菜单
     * @returns {String} 标准化后的图标名
     */
    normalizeIcon(icon, isChild = false) {
      if (!icon) return isChild ? 'Document' : 'Menu'
      // 统一处理Element Plus图标前缀
      return icon.replace(/^(el-icon-|icon-)/, '')
    },

    /**
     * 根据菜单ID获取菜单项
     * @param {String|Number} id 菜单ID
     * @returns {Object|null} 菜单项
     */
    getMenuItemById(id) {
      const findInTree = (menus) => {
        for (const menu of menus) {
          if (menu.id == id) return menu
          if (menu.children) {
            const found = findInTree(menu.children)
            if (found) return found
          }
        }
        return null
      }
      return findInTree(this.menus)
    }
  }
})